#ifndef MUSICDATABASE_H
#define MUSICDATABASE_H

#include <QObject>
#include <QThread>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
#include <QThread>
#include <QStringList>
#include <QFile>


class MusicDatabase : public QObject
{
    Q_OBJECT
public:
    explicit MusicDatabase(QObject *parent = nullptr,\
            const QString &fileName = "music.db");

signals:
    void resultOfSelect(QStringList musicInfoList);

public slots:
    //扫描表--一整张表
    void scanAllTable();
    //插入数据
    void insertDataIntoTable(QStringList musicInfoList);
    //删除数据
    void deleteDataOnTable(QString mp3Path);
    //删除数据，同时删除本地文件
    void deleteMusicOnSystem(QString mp3Path);

private slots:
    //创建表
    void createMusicTable();

private:
    QThread* thread;
};

#endif // MUSICDATABASE_H

/***********************************************************************************************/
/***********************************************************************************************/
/***********************************************************************************************/
/***********************************************************************************************/
/***********************************************************************************************/
/*
    该类移入了线程进行操作，请不要指定夫对象！
    该类用于对数据库进行操作，数据库的名称为： music.db(可以在构造的时候传参修改)
    其中有一张本地歌曲表，表的名称为： localMusicTable
    表结构
    musicInfoList[0]:歌曲名称
    musicInfoList[1]:歌曲绝对地址(主键)
    musicInfoList[2]:歌词名称(没有则为空)
    musicInfoList[3]:歌词绝对地址(没有则为空)


提供了以下接口，可以用于访问该数据库---最好是通过信号的方式调用
void scanAllTable();//扫描表--一整张表
void insertDataIntoTable(QStringList musicInfoList);//插入数据
void deleteDataOnTable(QString mp3Path);//删除数据--仅在数据库中删除
void deleteMusicOnSystem(QString mp3Path);//删除数据，同时删除本地文件


*****************************************************************************************
函数详解
1.void scanAllTable();
    功能：扫描表--一整张表
    输入：空
    返回：空
    注释：内部会发送信号 resultOfSelect(QStringList musicInfoList)，
         扫到一条数据则立即将其返回，捕获该信号则可以得到数据库中的相关信息

2.void insertDataIntoTable(QStringList musicInfoList);
    功能：插入数据
    输入：歌曲信息列表
    返回：空
    注释：若歌曲的绝对路径已经存在数据表中，则不会进行插入

3.void deleteDataOnTable(QString mp3Path);
    功能：删除数据--仅在数据库中删除
    输入：歌曲的绝对路径
    返回：空

4.void deleteMusicOnSystem(QString mp3Path);
    功能：删除数据，同时删除本地文件
    输入：歌曲的绝对路径
    返回：空
*/
